Skip to content

[PGS] 실패율 - #66

Open
been12151 wants to merge 13 commits into
mainfrom
week4/실패율

Hidden character warning

The head ref may contain hidden characters: "week4/\uc2e4\ud328\uc728"
Open

[PGS] 실패율#66
been12151 wants to merge 13 commits into
mainfrom
week4/실패율

Conversation

@been12151

Copy link
Copy Markdown
Owner

🍪 문제 이름

Resolve: 실패율

🍊 문제 정의

input

  • N : 전체 스테이지 수 (1 이상 500 이하)
  • stages : 사용자가 현재 머물러 있는 스테이지 번호 배열 (1 이상 N+1 이하, N+1은 모든 스테이지를 클리어한 사용자)

output

  • 실패율이 높은 스테이지부터 내림차순으로 정렬된 스테이지 번호 배열. 실패율이 같으면 낮은 번호의 스테이지가 먼저 옴

예시

N stages result
5 [2, 1, 2, 6, 2, 4, 3, 3] [3, 4, 2, 1, 5]
4 [4, 4, 4, 4, 4] [4, 1, 2, 3]

🍑 알고리즘 설계

Counter로 각 스테이지에 머물러 있는 사용자 수를 미리 집계.
1번 스테이지부터 N번 스테이지까지 순회하면서, 현재 스테이지에 도달한 사용자 수(total)로 실패율을 계산하고, 해당 스테이지에 머문 사용자 수를 total에서 빼서 다음 스테이지의 도달자 수를 갱신.
total이 0이면 실패율을 0으로 처리. 최종적으로 실패율 기준 내림차순으로 스테이지 번호를 정렬해 반환.

from collections import Counter

def solution(N, stages):
    counter = Counter(stages)
    total = len(stages)
    fail_rate = {}

    for stage in range(1, N+1):
        if total == 0:
            fail_rate[stage] = 0
        else:
            fail_rate[stage] = counter[stage] / total
        total -= counter[stage]

    return sorted(fail_rate, key=lambda x: fail_rate[x], reverse=True)

🥝 최악 수행 시간 복잡도

  • O(n + N log N) (n = stages 길이, N = 스테이지 수)
  • Counter 생성에 O(n), 스테이지 순회에 O(N), 정렬에 O(N log N)이므로 전체 O(n + N log N)

🍰 특이 사항 (Optional)

total을 매 스테이지마다 해당 스테이지 머문 인원만큼 줄여가며 다음 스테이지의 도달자 수를 구하는 부분에서, 이걸 빠뜨리면 분모가 계속 전체 사용자 수로 고정되어 오답이 나옴.

@been12151
been12151 requested review from gayo73 and yangyeeeun July 13, 2026 12:37
@been12151 been12151 self-assigned this Jul 13, 2026
@been12151 been12151 linked an issue Jul 14, 2026 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[PGS] 실패율 / level1

2 participants